package com.cskaoyan.javase.oop3._2inner._3local._0introduction;

/**
 * 局部内部类
 * 局部内部类是定义在一个方法或者一个作用域(就是定义在局部位置)里面的类
 * 简单来说，将局部内部类看成是局部变量即可，该类的有效范围仅在作用域内部
 * 说具体点,就在大括号内部类
 * （这意味着要创建它的对象，必须在作用域内部创建）
 *
 * 从语法和具体使用上看，局部内部类和成员内部类很相似
 * 有点类似于直接把一个成员内部类放进局部位置，语法是：
 * // 局部位置
 * class Inner{
 *
 * }
 * // 局部位置
 *
 * 在具体看各项前，仍然是先明确以下：
 *      1.局部内部类是一种比成员内部类更加极致封装思想的体现,成员内部类在成员位置，类中都是可以访问到它的。
 *          但是局部内部类一旦出了作用域等就不再生效了,就没有办法再去访问到这个类了.
 *      2.局部内部类的使用会显著增加代码层级，导致代码可读性很变差，所以如无必要不要使用局部内部类。
 *      如果你在局部位置碰到问题，希望有一个对象能够解决问题，需要定义一个类，同时又希望该类不被外界所感知
 *      仅在方法内部生效，就可以使用局部内部类。
 *      当然，局部内部类在某些时候，还能节省一些代码量，会方便一些。(后面的知识点)
 *
 *
 * 局部内部类的自身特点,(把它类比成局部变量来看)
 * 主要从以下几个角度分析：
 *      1.访问权限修饰符
 *          局部内部类已经被大括号限制死了作用域
 *          没有必要使用访问权限修饰符了,它也不能用访问权限修饰符
 *          static能不能用呢?
 *          当然也不行
 *
 *      2.成员特点
 *          和成员内部类没有区别,是一样的:
 *          没有静态声明
 *          但是可以定义字面值常量赋值的全局常量
 *
 *
 *      3.继承和实现
 *          这是学习局部内部类的重点之一
 *          定义局部内部类基本上都是为了继承和实现的
 *
 *
 * @since 10:06
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}

class EnclosedClazz {
    public void test() {
        // 局部位置,定义局部内部类
        class LocalInnerClazz {
            int a = 10;
            private int b = 20;
            // static int c = 30;
            static final int D = 40;
            public void testInner(){}
            // public static void testInnerStatic(){}
            {}
            public LocalInnerClazz() {
            }
            // static {}
        }
    }
    public void test2(){

    }
}